<?php namespace Admin\Controller;
use Hdphp\Controller\Controller;

class GoodsController extends CommonController{
	//定义私有属性，只有类的内部可以使用 __init是框架定义的，不与父级构造函数冲突
	private $model;
	public function __init(){
		//调用CommonController里面的构造函数
		parent::__init();
		//实例化Cate模型类
		$this->model = new \Common\Model\Goods;
	}
	//商品展示
	public function index(){
		//查询商品数据
		$goodData = $this->model->get();
		View::with('goodData',$goodData);
	    View::make();
	}
	//商品添加
	public function add(){
		if(IS_POST){
			//自动过滤，并且可以获取错误信息
			if(!$this->model->store()) View::error($this->model->getError());
			//如果通过上面的过滤通过说明已插入数据库，提示成功			
			View::success('添加成功',U('index'));
		}
		//实例化商品分类表
		$cateModel = new \Common\Model\Cate;
		//实例化商品品牌表
		$brandModel = new \Common\Model\Brand;
		//查询出商品分类数据和品牌数据
		$cateData = $cateModel->get();
		//将分类数据变为树状结构
		$cateData = Data::tree($cateData,'cname','cid');
		$brandData = $brandModel->get();
		//分配变量
		View::with('cateData',$cateData);
		View::with('brandData',$brandData);
		//p($cateData);
	    View::make();
	}
	//异步请求，获得类型属性
	public function getTypeAttr(){
		//获得type_typid以确定要获得那条数据
	   $type_typid = Q('post.id',0,'intval');
	   //查询类型属性表数据库
	   $data = Db::table('typeattr')->where("type_typid={$type_typid}")->get();
		//循环组合新的数组
	   foreach($data as $k => $v) {
	   		$data[$k]['tvalue'] = explode('|', $v['tvalue']);
	   }
//	   p($data);
	   //编码成JSON的形式返出，这样在JS中才能接收到
	   echo json_encode($data);exit;
	}
	//删除商品
	public function del(){
		//确定要删除谁
		$gid = Q('get.gid',0,'intval');
		
		//1.删除商品属性表对应商品属性数据
		$attrModel = new \Common\Model\Goodsattr;
		$attrModel->where("goods_gid = {$gid}")->delete();

		//2.删除商品表
		//删除upload下的列表图
		//得到图片的路径
		$pic = $this->model->where("gid={$gid}")->pluck('listview');
		//执行删除图片
		if($pic) unlink($pic);
		//再执行删除数据库里的该条记录
		$this->model->where("gid={$gid}")->delete();
		//3.删除商品详情表对应商品详情数据
		$detailModel = new \Common\Model\Goodsdetail;
		//获得数据库中存放图片地址的字符串
		$pics = $detailModel->where("goods_gid = {$gid}")->pluck('gdpics');
		//由于是多个图片路径组合的字符串，所以将其拆分成数组
		$arrpics = explode(',', $pics);
		//循环删除upload下面的图片
		foreach ($arrpics as $k => $v) {
			if($v) unlink($v);
			
		}
		//删除详情表里的该条记录
		$detailModel->where("goods_gid = {$gid}")->delete();
		//4.删除货品列表里的货品数据
		Db::table('kindgoods')->where("goods_gid={$gid}")->delete();
		//提示成功
		View::success('删除该商品成功');
	}
	//修改商品
	public function edit(){
		//获得要编辑的商品的主键
		$gid = Q('get.gid',0,'intval');
		if(IS_POST){
			
			if(!$this->model->edit()) View::error($this->model->getError());
			View::success('编辑成功',U('index',array('gid'=>"$gid")));
		}
		
		//根据gid获得type_typid从而获得该商品的类型属性值
		$tid = $this->model->where("gid={$gid}")->pluck('type_typid');
		//获得类型属性值（二维数组）
		$data = Db::table('typeattr')->where("type_typid={$tid}")->get();
		//定义商品类型和商品属性的两个空数组
		$spec=array();
		$attr=array();
		//循环二维数组将里面的属性值压入属性或者规格数组里，组成每个商品的属性和规格
	   foreach($data as $k => $v) {
	   		$attrvalue= explode('|', $v['tvalue']);
		   //如果是商品规格的时候
	   		if($v['tclass']==1){
				$spec[]=$v;
	   		}else{
	   		//如果是商品属性的时候
	   			$attr[]=$v;
	   		}
        }
		//将规格和属性的值拆分成数组
		foreach ($spec as $k => $v) {
			$spec[$k]['tvalue'] = explode('|', $v['tvalue']);
		}
		foreach ($attr as $k => $v) {
			$attr[$k]['tvalue'] = explode('|', $v['tvalue']);
		}
		View::with('attr',$attr);
		View::with('spec',$spec);		
		//p($spec);	
		//获得商品表旧内容		
		$oldData = $this->model->where("gid={$gid}")->find();
		//关联商品属性表和类型属性表取出类型属性值和商品属性值用于编辑页面中属性和规格的循环
		$attr2 = Db::table('goodsattr')->join('typeattr','tid','=','typeattr_tid')->where("goods_gid={$gid}")->get();
		foreach ($attr2 as $k => $v) {
			if(!empty($v['tvalue'])){
				$attr2[$k]['tvalue'] = explode('|', $v['tvalue']);
			}
		}
		//分配旧数据
		View::with('oldData',$oldData);
		View::with('attr2',$attr2);
		//获得商品品牌数据
		$brandModel = new \Common\Model\Brand;
		$brandData = $brandModel->get();
		
		//分配品牌数据
		View::with('brandData',$brandData);
		//实例化商品分类表
		$cateModel = new \Common\Model\Cate;
		$cateData = $cateModel->get();
		//变为树状结构
		$cateData = Data::tree($cateData,'cname','cid');
		View::with('cateData',$cateData);
		//获得商品详情表里的旧数据			
		$detail = Db::table('goodsdetail')->where("goods_gid={$gid}")->get();
		foreach ($detail as $k => $v) {
			$detail[$k]['gdpics'] = explode(',', $v['gdpics']);
		}
		View::with('detail',$detail);
		//p($detail);
	    View::make();
	}
	 //uploadify异步上传
	public function upload(){
	    $file = Upload::path('Upload/Content/' . date('y/m'))->make();
	    if (empty($file)) {
	        $this->ajax(Upload::getError());
	    } else {
	        /** $file内部就是以下这个数组
	            $file = array(
	                0 => array(
		                'path' => 'Upload/Content/15/8/123981239172.jpg'    ,
		                'url' => 'http://localhost/cms_edu/Upload/Content/15/8/123981239172.jpg',
		                'image' => 1
	            ),
	        );**/
	        //上传成功，把上传好的信息返给js
	        $data = $file[0];
	        echo json_encode($data);
	    }
	}
	
	
	
	
	
}
?>